In [1]:
import os

import lasio

In [2]:
las = lasio.read(os.path.join('..', 'tests', 'examples', 'sample.las'))

we'll use this LAS file as an example:


In [3]:
print las._text


~VERSION INFORMATION
 VERS.                  1.2:   CWLS LOG ASCII STANDARD -VERSION 1.2
 WRAP.                  NO:   ONE LINE PER DEPTH STEP
~WELL INFORMATION BLOCK
#MNEM.UNIT       DATA TYPE    INFORMATION
#---------    -------------   ------------------------------
 STRT.M        1670.000000:
 STOP.M        1660.000000:
 STEP.M            -0.1250:
 NULL.           -999.2500:
 COMP.             COMPANY:   # ANY OIL COMPANY LTD.
 WELL.                WELL:   ANY ET AL OIL WELL #12
 FLD .               FIELD:   EDAM
 LOC .            LOCATION:   A9-16-49-20W3M
 PROV.            PROVINCE:   SASKATCHEWAN
 SRVC.     SERVICE COMPANY:   ANY LOGGING COMPANY LTD.
 DATE.            LOG DATE:   25-DEC-1988
 UWI .      UNIQUE WELL ID:   100091604920W300
~CURVE INFORMATION
#MNEM.UNIT      API CODE      CURVE DESCRIPTION
#---------    -------------   ------------------------------
 DEPT.M                      :  1  DEPTH
 DT  .US/M     		     :  2  SONIC TRANSIT TIME
 RHOB.K/M3                   :  3  BULK DENSITY
 NPHI.V/V                    :  4   NEUTRON POROSITY
 SFLU.OHMM                   :  5  RXO RESISTIVITY
 SFLA.OHMM                   :  6  SHALLOW RESISTIVITY
 ILM .OHMM                   :  7  MEDIUM RESISTIVITY
 ILD .OHMM                   :  8  DEEP RESISTIVITY
~PARAMETER INFORMATION
#MNEM.UNIT        VALUE       DESCRIPTION
#---------    -------------   ------------------------------
 BHT .DEGC         35.5000:   BOTTOM HOLE TEMPERATURE
 BS  .MM          200.0000:   BIT SIZE
 FD  .K/M3       1000.0000:   FLUID DENSITY
 MATR.              0.0000:   NEUTRON MATRIX(0=LIME,1=SAND,2=DOLO)
 MDEN.           2710.0000:   LOGGING MATRIX DENSITY
 RMF .OHMM          0.2160:   MUD FILTRATE RESISTIVITY
 DFD .K/M3       1525.0000:   DRILL FLUID DENSITY
~Other
     Note: The logging tools became stuck at 625 meters causing the data
	   between 625 meters and 615 meters to be invalid.
~A  DEPTH     DT       RHOB     NPHI     SFLU     SFLA      ILM      ILD
1670.000   123.450 2550.000    0.450  123.450  123.450  110.200  105.600
1669.875   123.450 2550.000    0.450  123.450  123.450  110.200  105.600
1669.750   123.450 2550.000    0.450  123.450  123.450  110.200  105.600

Now use the ExcelConverter object to produce an Excel spreadsheet:


In [4]:
lasio.ExcelConverter(las).write('example.xlsx')

we can import this spreadsheet back into Python directly using pandas:


In [5]:
import pandas

The spreadsheet has two sheets, one called "Header" with the header information from each section:


In [6]:
xls_header_sheet = pandas.read_excel('example.xlsx', sheetname='Header')

In [7]:
xls_header_sheet


Out[7]:
Section Mnemonic Unit Value Description
0 ~Version VERS NaN 1.2 CWLS LOG ASCII STANDARD -VERSION 1.2
1 ~Version WRAP NaN NO ONE LINE PER DEPTH STEP
2 ~Well STRT M 1670 NaN
3 ~Well STOP M 1660 NaN
4 ~Well STEP M -0.125 NaN
5 ~Well NaN NaN -999.25 NaN
6 ~Well COMP NaN # ANY OIL COMPANY LTD. COMPANY
7 ~Well WELL NaN ANY ET AL OIL WELL #12 WELL
8 ~Well FLD NaN EDAM FIELD
9 ~Well LOC NaN A9-16-49-20W3M LOCATION
10 ~Well PROV NaN SASKATCHEWAN PROVINCE
11 ~Well SRVC NaN ANY LOGGING COMPANY LTD. SERVICE COMPANY
12 ~Well DATE NaN 25-DEC-1988 LOG DATE
13 ~Well UWI NaN 100091604920W300 UNIQUE WELL ID
14 ~Parameter BHT DEGC 35.5 BOTTOM HOLE TEMPERATURE
15 ~Parameter BS MM 200 BIT SIZE
16 ~Parameter FD K/M3 1000 FLUID DENSITY
17 ~Parameter MATR NaN 0 NEUTRON MATRIX(0=LIME,1=SAND,2=DOLO)
18 ~Parameter MDEN NaN 2710 LOGGING MATRIX DENSITY
19 ~Parameter RMF OHMM 0.216 MUD FILTRATE RESISTIVITY
20 ~Parameter DFD K/M3 1525 DRILL FLUID DENSITY

and another called "Curves" containing the data itself:


In [8]:
xls_data_sheet = pandas.read_excel('example.xlsx', sheetname='Curves')

In [9]:
xls_data_sheet


Out[9]:
DEPT DT RHOB NPHI SFLU SFLA ILM ILD
0 1670.000 123.45 2550 0.45 123.45 123.45 110.2 105.6
1 1669.875 123.45 2550 0.45 123.45 123.45 110.2 105.6
2 1669.750 123.45 2550 0.45 123.45 123.45 110.2 105.6

If you want to further modify the openpyxl.Workbook object, you can access it like so:


In [10]:
converter = lasio.ExcelConverter(las)

In [11]:
type(converter.workbook)


Out[11]:
openpyxl.workbook.workbook.Workbook

finally take a look at some screenshots of the Excel file itself:


In [ ]: